home *** CD-ROM | disk | FTP | other *** search
- #include "stdafx.h"
-
- #include <stdlib.h>
- #include <stdio.h>
- #include <windows.h>
-
- #include "../../TlenSources/plugin/plugin_struct.h"
- #include "../../TlenSources/plugin/plugin_menu.h"
- #include "../../TlenSources/plugin/plugin_procaddr.h"
- #include "../../TlenSources/plugin/sl_struct.h"
- #include "../../TlenSources/plugin/cl_struct.h"
-
- #include "AggressiveOptimize.h"
-
- //Tymczasowe definicje, bΩdzie oddzielny plik nag│≤wkowy
- #define PROTOCOL_ID_TLEN "TLEN"
- #define PROTOCOL_ID_GG "GG"
- #define PROTOCOL_ID_SMS "SMS"
- #define PROTOCOL_ID_GROUP "GRP"
-
- HINSTANCE hInst;
- TLENPLUGINFUNCTIONS *tlen_functions;
- sl_add_type sl_add;
- HANDLE menuitem1, menuitem2;
-
- #define TEST_MENU_ITEM_1 "MenuPlugin/TestItem1"
- #define TEST_MENU_ITEM_2 "MenuPlugin/TestItem2"
- #define TEST_MENU_ITEM_3 "MenuPlugin/TestItem3"
- #define TEST_MENU_ITEM_4 "MenuPlugin/TestItem4"
- #define TEST_MENU_ITEM_5 "MenuPlugin/TestItem5"
- #define TEST_MENU_ITEM_6 "MenuPlugin/TestItem6"
-
- TLENPLUGININFO pluginInfo={
- sizeof(TLENPLUGININFO),
- "Wykorzystanie menu - VC++",
- PLUGIN_API_VERSION,
- MAKE_DWORD_VERSION(1,0,0,0),
- "Plugin pokazuje funkcje menu - dodawanie pozycji, kasowanie, szukanie, zmianΩ parametr≤w, dodawanie funkcji callback do menu, etc.",
- "Prawa autorskie",
- "Producent",
- "E@mail",
- "http://www",
- 0,
- 0,
- 0,
- 0
- };
-
- extern "C" __declspec(dllexport) TLENPLUGININFO* GetPluginInfo(DWORD TlenVersion);
- extern "C" __declspec(dllexport) int LoadPlugin(TLENPLUGINFUNCTIONS *tlen_functions);
- extern "C" __declspec(dllexport) int UnloadPlugin(void);
-
-
- BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
- {
- hInst=hinstDLL;
- return TRUE;
- }
-
- __declspec(dllexport) TLENPLUGININFO* GetPluginInfo(DWORD tlenVersion)
- {
- return &pluginInfo;
- }
-
- static int MenuItemEvent(WPARAM wParam, LPARAM lParam)
- {
- //Znajdziemy i usuniemy pozycje "Powiadom znajomego" w menu glownym
- TlenMenuItemDefinition mi;
- InitializeStruct(mi);
-
- mi.Flags = TMIS_ITEMID;
- mi.Item_ID = MI_MAIN_NOTIFYFRIEND;
-
- TlenMenuItemDefinition *item = (TlenMenuItemDefinition *) tlen_functions->CallTlenFunction(hInst, TLEN_FIND_MENU_ITEM, (WPARAM) &mi, NULL);
-
- if (item)
- {
- if (tlen_functions->CallTlenFunction(hInst, TLEN_DELETE_MENU_ITEM, (WPARAM) item->ItemHandle, NULL) == 0)
- {
- //szukan╣ pozycjΩ usuniΩto
- MessageBox(NULL, "Pozycja usuniΩta", "OK", MB_OK);
-
- //zmienimy teraz nasz╣ pierwsz╣ pozycjΩ
- InitializeStruct(mi);
-
- mi.Flags = TMIM_CAPTION | TMIM_FLAGS;
- mi.Caption = "PozycjΩ usuniΩto poprawnie";
- mi.Flags |= TMI_GRAYED | TMI_CHECKED;
-
- tlen_functions->CallTlenFunction(hInst, TLEN_CHANGE_MENU_ITEM, (WPARAM) menuitem1, (LPARAM) &mi);
- }
- else
- {
- MessageBox(NULL, "Nie uda│o siΩ usun╣µ pozycji", "B│╣d", MB_OK);
- }
- }
- else
- {
- MessageBox(NULL, "Nie uda│o siΩ odnaleƒµ pozycji", "B│╣d", MB_OK);
- }
-
-
- return 0;
- }
-
- static int MenuItem2Event(WPARAM wParam, LPARAM lParam)
- {
- TlenMenuItemDefinition *item = (TlenMenuItemDefinition *) wParam;
- MenuPopupInfo *info = (MenuPopupInfo *) lParam;
-
- //Wy£wietlimy informacjΩ o zaznaczonych na li£cie kontaktach (kontakcie)
- static char text[8192];
-
- sprintf(text, "MenuID: %s\nLocationID: %s\nItemID: %s\n\nContacts (%d):\n", info->Menu_ID, info->Location_ID,
- item->Item_ID, info->Contacts.count);
-
- for (int i = 0; i < info->Contacts.count; i++)
- {
- strcat(text, info->Contacts.contacts[i].ContactID);
- strcat(text, " ");
- strcat(text, info->Contacts.contacts[i].ProtocolID);
- strcat(text, "\n");
- }
-
- MessageBox(NULL, text, "Informacje", MB_OK);
-
- return 0;
- }
-
- static int MenuEvent(WPARAM wParam, LPARAM lParam)
- {
- //Tu┐ przed wy£wietleniem menu wska┐emy pozycje, kt≤re chcemy pokazaµ
- if (wParam == TLEN_MENU_CALLBACK_BEFORE_POPUP)
- {
- MenuPopupInfo *info = (MenuPopupInfo *) lParam;
-
- //T╣ pozycjΩ poka┐emy tylko przy kontaktach tlenowych
- if (info->Contacts.count && strcmp(info->Contacts.contacts[0].ProtocolID, PROTOCOL_ID_TLEN) == 0)
- {
- sl_add(&(info->MenuItemsToShow), TEST_MENU_ITEM_1);
- }
-
- //A te przy wszystkich
- sl_add(&(info->MenuItemsToShow), TEST_MENU_ITEM_2);
- sl_add(&(info->MenuItemsToShow), TEST_MENU_ITEM_3);
- sl_add(&(info->MenuItemsToShow), TEST_MENU_ITEM_4);
- sl_add(&(info->MenuItemsToShow), TEST_MENU_ITEM_5);
- sl_add(&(info->MenuItemsToShow), TEST_MENU_ITEM_6);
-
-
- //W zale┐no£ci od tego ile jest zaznaczonych kontakt≤w zmienimy napis pozycji menu
- TlenMenuItemDefinition mi;
- InitializeStruct(mi);
-
- mi.Flags = TMIM_CAPTION;
-
- char t1[] = "Poka┐ informacje o kontakcie";
- char t2[] = "Poka┐ informacje o kontaktach";
-
- if (info->Contacts.count > 1)
- {
- mi.Caption = t2;
- }
- else
- {
- mi.Caption = t1;
- }
-
- tlen_functions->CallTlenFunction(hInst, TLEN_CHANGE_MENU_ITEM, (WPARAM) menuitem2, (LPARAM) &mi);
-
- return 1;
- }
-
- return 0;
- }
-
- __declspec(dllexport) int LoadPlugin(TLENPLUGINFUNCTIONS *functions)
- {
- tlen_functions = functions;
-
- sl_add = (sl_add_type) tlen_functions->CallTlenFunction(hInst, TLEN_GET_PROC_ADDRESS, TPA_SL_ADD, NULL);
-
- TlenMenuItemDefinition mi;
- InitializeStruct(mi);
-
- HBITMAP icon = (HBITMAP) LoadImage(hInst, MAKEINTRESOURCE(101),IMAGE_BITMAP, 16, 16, NULL);
-
- //Dodajemy po kolei wszystkie pozycje menu
- mi.Item_ID = TEST_MENU_ITEM_1;
- mi.Caption = "Usuwa \"Powiadom znajomego\"";
- mi.Menu_ID = TLEN_MENUID_CL_ELEMENT;
- mi.ModuleHandle = hInst;
- mi.CallBack = MenuItemEvent;
- mi.Position = 500000;
- mi.Icon.Bitmap = icon;
- mi.Icon.Transparent = RGB(0xBC, 0xD5, 0xE7);
- mi.HotKey = MAKEWORD(70, (BYTE) MOD_CONTROL);
-
- menuitem1 = (HANDLE) tlen_functions->CallTlenFunction(hInst, TLEN_ADD_MENU_ITEM, (WPARAM) &mi, NULL);
-
- InitializeStruct(mi);
-
- mi.Item_ID = TEST_MENU_ITEM_2;
- mi.Menu_ID = TLEN_MENUID_CL_ELEMENT;
- mi.ModuleHandle = hInst;
- mi.CallBack = MenuItem2Event;
- mi.Position = -500000;
-
- menuitem2 = (HANDLE) tlen_functions->CallTlenFunction(hInst, TLEN_ADD_MENU_ITEM, (WPARAM) &mi, NULL);
-
- InitializeStruct(mi);
-
- mi.Item_ID = TEST_MENU_ITEM_3;
- mi.Menu_ID = TLEN_MENUID_CL_ELEMENT;
- mi.Caption = "Rozwijane menu";
- mi.ModuleHandle = hInst;
- mi.Position = 500100;
-
- tlen_functions->CallTlenFunction(hInst, TLEN_ADD_MENU_ITEM, (WPARAM) &mi, NULL);
-
- InitializeStruct(mi);
-
- mi.Item_ID = TEST_MENU_ITEM_4;
- mi.Menu_ID = TLEN_MENUID_CL_ELEMENT;
- mi.Parent_ID = TEST_MENU_ITEM_3;
- mi.Caption = "Pozycja 1";
- mi.ModuleHandle = hInst;
- mi.Position = 100;
-
- tlen_functions->CallTlenFunction(hInst, TLEN_ADD_MENU_ITEM, (WPARAM) &mi, NULL);
-
- InitializeStruct(mi);
-
- mi.Item_ID = TEST_MENU_ITEM_5;
- mi.Menu_ID = TLEN_MENUID_CL_ELEMENT;
- mi.Parent_ID = TEST_MENU_ITEM_3;
- mi.Caption = "Pozycja 2";
- mi.ModuleHandle = hInst;
- mi.Position = 10100;
-
- tlen_functions->CallTlenFunction(hInst, TLEN_ADD_MENU_ITEM, (WPARAM) &mi, NULL);
-
- InitializeStruct(mi);
-
- mi.Item_ID = TEST_MENU_ITEM_6;
- mi.Menu_ID = TLEN_MENUID_CL_ELEMENT;
- mi.Parent_ID = TEST_MENU_ITEM_3;
- mi.Caption = "Pozycja 3";
- mi.ModuleHandle = hInst;
- mi.Position = 10200;
-
- tlen_functions->CallTlenFunction(hInst, TLEN_ADD_MENU_ITEM, (WPARAM) &mi, NULL);
-
- //Dodajemy callback do menu listy kontaktow
- tlen_functions->CallTlenFunction(hInst, TLEN_ADD_MENU_CALLBACK, (WPARAM) TLEN_MENUID_CL_ELEMENT, (LPARAM) MenuEvent);
-
- DeleteObject(icon);
-
- return 0;
- }
-
- __declspec(dllexport) int UnloadPlugin(void)
- {
- //Usuwamy callback menu listy kontakt≤w - je£li tego nie zrobimy po wy│adowaniu pluginu i pr≤bie pokazania menu mamy gwarantowany access violation
- tlen_functions->CallTlenFunction(hInst, TLEN_REMOVE_MENU_CALLBACK, (WPARAM) TLEN_MENUID_CL_ELEMENT, (LPARAM) MenuEvent);
-
- return 0;
- }
-